#ifndef BASE_LIST_H
#define BASE_LIST_H

#include "../c1.h"

typedef int ElemType;

class List {
public:
    List() {}
    ~List() {}

public:
    /**
     * 构造一个空的线性表
     */
    virtual Status InitList(void);
    /**
     * 销毁线性表
     */
    virtual Status DestoryList(void);
    /**
     * 清空线性表
     */
    virtual Status ClearList(void);
    /**
     * 线性表是否为空
     */
    virtual Status ListEmpty(void);
    /**
     * 线性表长度
     */
    virtual int ListLength(void);
    /**
     * 获取线性表第i个位置的元素
     */
    virtual Status GetElem(int i, ElemType *e);
    /**
     * 返回L中第1个与e满足关系compare()的数据元素的位置
     */
    virtual int LocateElem(ElemType e, Status(*compare)(ElemType, ElemType));
    /**
     * 返回线性表前驱
     */
    virtual Status PriorElem(ElemType cur, ElemType *prev);
    /**
     * 返回线性表后继
     */
    virtual Status NextElem(ElemType cur, ElemType *next);
    /**
     * 线性表第i个位置插入e
     */
    virtual Status ListInsert(int i, ElemType e);
    /**
     * 删除线性表第i个位置元素
     */
    virtual Status ListDelete(int i, ElemType *e);
    /**
     * 遍历线性表
     */
    virtual Status ListTraverse(void);

    /**
     * 合并两个线性表
     * 将线性表Lb中不在La中的数据元素插入到La中
     */
    virtual Status ListMerge(List *Lb);

    /**
     * 头部插入节点
     */
    virtual Status ListHeadInsert(ElemType e);
    /**
     * 尾部插入节点
     */
    virtual Status ListTailInsert(ElemType e);

    static Status equal(ElemType c1, ElemType c2);
    static void print(ElemType *c);
};

#endif